package com.demo.business.user;

import com.tiangong.framework.annotation.OpenApi;
import com.tiangong.framework.bo.CDO;
import com.tiangong.framework.bo.Return;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * @description: 1)用户表
 * @create: 2022-02-25 23:30:08
 **/
@Service("user")
@Slf4j
public class UserService{

    @Resource
    UserDao userDao;

    /**
     * 添加1)用户表,获取lUserId数据
     *
     * @param cdoRequest - lUserId:用户Id
     *                   - sNickName:昵称
     *                   - sMobile:手机号
     *                   - sOpenId:小程序登入唯一标识
     *                   - sUserHeadPic:头像
     *                   - sCity:所在城市
     *                   - QQ:QQ
     *                   - WX:WX
     *                   - nSex:性别：0女,1男,3：未选择性别
     *                   - nLng:经度
     *                   - nLat:纬度
     *                   - nStatus:信息完整度：0基本信息未完成,2基本信息已完成，3、附加信息已完成
     *                   - nOnLine:在线状态：0，在线，1：不在线，2隐身
     *                   - bVip:是否VIP：0false，1true
     *                   - dOffLineTime:离线时间
     *                   - dVIPInvalidTime:
     *                   - dCreateTime:创建时间
     *                   - dUpdateTime:更新时间
     *                   - sSource:来源
     *                   - sReferrer:推荐人
     *                   - nLock:锁定，0正常，99锁定
     *                   - nAuthType:认证类型：0，未认证，1、邀请码认证 2、购买VIP认证，3、视频认证,4、隐藏认证视频
     *                   - nCheckStatus:0：未审核，1、已审核 2、审核未通过，3、审核中
     * @return
     * @author 
     * @create: 2022-02-25 23:30:08
     */
    @OpenApi
    public Return addUser(CDO cdoRequest) {
        userDao.addUser(cdoRequest);
        CDO cdoResult = new CDO();
        if (cdoRequest.containsKey("lUserId")) {
            cdoResult.set("lUserId", cdoRequest.get("lUserId"));
        }
        return Return.valueOf(cdoResult);
    }

    /**
     * 根据lUserId，更新1)用户表数据
     *
     * @param cdoRequest - lUserId:用户Id
     *                   - sNickName:昵称
     *                   - sMobile:手机号
     *                   - sOpenId:小程序登入唯一标识
     *                   - sUserHeadPic:头像
     *                   - sCity:所在城市
     *                   - QQ:QQ
     *                   - WX:WX
     *                   - nSex:性别：0女,1男,3：未选择性别
     *                   - nLng:经度
     *                   - nLat:纬度
     *                   - nStatus:信息完整度：0基本信息未完成,2基本信息已完成，3、附加信息已完成
     *                   - nOnLine:在线状态：0，在线，1：不在线，2隐身
     *                   - bVip:是否VIP：0false，1true
     *                   - dOffLineTime:离线时间
     *                   - dVIPInvalidTime:
     *                   - dCreateTime:创建时间
     *                   - dUpdateTime:更新时间
     *                   - sSource:来源
     *                   - sReferrer:推荐人
     *                   - nLock:锁定，0正常，99锁定
     *                   - nAuthType:认证类型：0，未认证，1、邀请码认证 2、购买VIP认证，3、视频认证,4、隐藏认证视频
     *                   - nCheckStatus:0：未审核，1、已审核 2、审核未通过，3、审核中
     * @return
     * @author 
     * @create: 2022-02-25 23:30:08
     */
    @OpenApi
    public Return updateUserById(CDO cdoRequest) {
        int affectedRows = userDao.updateUserById(cdoRequest);
        CDO cdoResult = new CDO();
        cdoResult.set("affectedRows", affectedRows);
        return Return.valueOf(cdoResult);
    }

    /**
     * 根据lUserId，删除1)用户表数据
     *
     * @param cdoRequest - lUserId:用户Id
     * @return
     * @author 
     * @create: 2022-02-25 23:30:08
     */
    @OpenApi
    public Return deleteUserById(CDO cdoRequest){
        int affectedRows = userDao.deleteUserById(cdoRequest.getLong("lUserId"));
        CDO cdoResult = new CDO();
        cdoResult.set("affectedRows", affectedRows);
        return Return.valueOf(cdoResult);
    }

    /**
     * 根据条件，删除1)用户表数据
     *
     * @param cdoRequest - sNickName:昵称
     *                   - nLng:经度
     *                   - nLat:纬度
     * @return
     * @author 
     * @create: 2022-02-25 23:30:08
     */
    //@OpenApi
    public Return deleteUser(CDO cdoRequest) {
        int affectedRows = userDao.deleteUser(cdoRequest);
        CDO cdoResult = new CDO();
        cdoResult.set("affectedRows", affectedRows);
        return Return.valueOf(cdoResult);
    }

    /**
     * 根据ID，获取1)用户表数据
     *
     * @param cdoRequest - lUserId:用户Id
     * @return
     * @author 
     * @create: 2022-02-25 23:30:08
     */
    @OpenApi
    public Return getUserById(CDO cdoRequest) {
        CDO cdoMapperResult = userDao.getUserById(cdoRequest.getLong("lUserId"));
        return Return.valueOf(cdoMapperResult);
    }

    /**
     * 根据混合条件，获取1)用户表数据
     *
     * @param cdoRequest - lUserId:用户Id
     *                   - sNickName:昵称
     *                   - nLng:经度
     *                   - nLat:纬度
     * @return
     * @author 
     * @create: 2022-02-25 23:30:08
     */
    @OpenApi
    public Return getUser(CDO cdoRequest) {
        CDO cdoMapperResult = userDao.getUser(cdoRequest);
        return Return.valueOf(cdoMapperResult);
    }

    /**
     * 根据非空条件，获取1)用户表数据列表
     *
     * @param cdoRequest - sNickName:昵称
     *                   - nLng:经度
     *                   - nLat:纬度
     * @return
     * @author 
     * @create: 2022-02-25 23:30:08
     */
    @OpenApi
    public Return getUserList(CDO cdoRequest) {
        Integer pageIndex = cdoRequest.containsKey("pageIndex") ? cdoRequest.getInteger("pageIndex") : 0;
        int recordSize = cdoRequest.containsKey("recordSize") ? cdoRequest.getInteger("recordSize") : 10;
        cdoRequest.set("recordFrom", pageIndex * recordSize);
        cdoRequest.set("recordSize", recordSize);
        List<CDO> cdoMapperResultList = userDao.getUserList(cdoRequest);
        boolean isEndPage = false;
        if (cdoMapperResultList.size() < recordSize) {
            isEndPage = true;
        }
        CDO cdoResult = new CDO();
        cdoResult.set("isEndPage", isEndPage);
        cdoResult.set("datalist", cdoMapperResultList);
        int total = userDao.getUserListCount(cdoRequest);
        cdoResult.set("total", total);
        return Return.valueOf(cdoResult);
    }

    /**
     * 根据混合条件，获取1)用户表数据列表
     *
     * @param cdoRequest - lUserId:用户Id
     *                   - sNickName:昵称
     *                   - nLng:经度
     *                   - nLat:纬度
     * @return
     * @author 
     * @create: 2022-02-25 23:30:08
     */
    @OpenApi
    public Return getUserListByCondition(CDO cdoRequest) {
        Integer pageIndex = cdoRequest.containsKey("pageIndex") ? cdoRequest.getInteger("pageIndex") : 0;
        int recordSize = cdoRequest.containsKey("recordSize") ? cdoRequest.getInteger("recordSize") : 10;
        cdoRequest.set("recordFrom", pageIndex * recordSize);
        cdoRequest.set("recordSize", recordSize);
        List<CDO> cdoMapperResultList = userDao.getUserListByCondition(cdoRequest);
        boolean isEndPage = false;
        if (cdoMapperResultList.size() < recordSize) {
            isEndPage = true;
        }
        CDO cdoResult = new CDO();
        cdoResult.set("isEndPage", isEndPage);
        cdoResult.set("datalist", cdoMapperResultList);
//        int total = userDao.getUserListByConditionCount(cdoRequest);
//        cdoResult.set("total", total);
        return Return.valueOf(cdoResult);
    }
}
